<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>reduce</title>
</head>
<body>
<script type="text/javascript">
    /*Anagrams of string(带有重复项)*/
//    使用递归，对于给定字符串中的每个字母，为字母创建字谜，使用map（）将字母与每部分字谜组合
//    然后使用reduce()将所有字谜组合在一个数组中，最基本情况是字符串长度等于2或1
    const anagrams=str=>{
        if(str.length<=2) return str.length===2?[str,str[1]+str[0]]:[str];
        return str.split('').reduce((acc,letter,i)=>
                acc.concat(anagrams(str.slice(0,i)+str.slice(i+1)).map(val=>letter+val)),[])
    }
    console.log(anagrams('abd'))

    /*数组平均值*/
//    使用reduce()将每个值添加到累加器，初始值为0,总和除以数组长度
    const average=arr=>arr.reduce((acc,val)=>acc+val)/arr.length
    console.log(average([1,3,4,5,6]))

    /*大写每个单词的首字母*/
//    使用replace()匹配每个单词的第一个字符，并使用toUpperCase()来将其大写
    const capitalizeEveryWord=str=>str.replace(/\b[a-z]/g,char=>char.toUpperCase())
    console.log(capitalizeEveryWord("hello world 1eew"))

    /*首字母大写*/
//    使用slice(0,1)和toUpperCase()大写第一个字母，slice(1)获取字符串的其余部分。省略lowerRest参数以保持字符串的其余部分不变，
//    或将其设置为true以转换成小写
    const capitalize=(str,lowerRest=false)=>
    str.slice(0,1).toUpperCase()+(lowerRest?str.slice(1).toLowerCase():str.slice(1))
    console.log(capitalize("heDFfdfd",true))

    /*检查回文*/
//    将字符串转换成 toLowerCase(),并使用replace()从中删除非字母的字符。然后，将其转换为toLowerCase(),将('')拆分为单独字符，
//    reverse(),join(''),与原始的非反转字符串进行比较。然后将其转换为 toLowerCase()
    const palindrome=str=>{
        const s = str.toLowerCase().replace(/[\w_]/g,'');
        return s===s.split('').reverse().join('');
    }
    console.log(palindrome("wtaco catw"))

    /*计算数组中值得出现次数*/
//    每次遇到数组中的特定值，使用reduce()来递增计数器
    const countOccurrences=(arr,value)=>arr.reduce((a,v)=>v===value?a+1:a+0);
    console.log(countOccurrences([1,1,2,1,3,4,5,5,5],1))

    /*当前URL*/
    const currentUrl=_=>window.location.href;
    console.log(currentUrl())

        var foo=new Object();
        var bar=new Object();
        var map=new Object();
        map[foo]="foo";
        map[bar]="bar";

        console.log(map[foo])
    /*******************************前端高能 begin********************************************************************************/
    function foo1(){
        return 1;
    }
    console.log(foo1())
    function foo1() {
        return 2;
    }
    var foo2=function () {
        return 1;
    }
    console.log(foo2())
    function foo2() {
        return 2;
    }
    /*******************************前端高能**********************************************************************************************/


</script>
</body>
</html>